##
# Categorizing 是分类（category）和被分类项（categorized）之间的关联关系。

module Unidom
  module Category

    class Categorizing < ApplicationRecord

      self.table_name = 'unidom_categorizings'

      include Unidom::Common::Concerns::ModelExtension

      belongs_to :category,    class_name:  'Unidom::Category::Category'
      belongs_to :categorized, polymorphic: true

      scope :category_is,    ->(category)    { where category_id: to_id(category) }
      scope :categorized_is, ->(categorized) { where categorized: categorized     }

      def self.categorize!(categorized, into: nil, at: Time.now)

        assert_present! :categorized, categorized
        assert_present! :into,        into
        assert_present! :at,          at

        categorized_is(categorized).category_is(into).valid_at.alive.first_or_create! elemental: true, opened_at: at

      end

    end unless Unidom::Common::Neglection.namespace_neglected? 'Unidom::Category::Categorizing'

  end
end
